/**
 * @param {number[]} nums
 * @param {number} k
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var rotate = function(nums, k) {
    // 通过一下
    let n = nums.length
    let res = new Array(n).fill(0)
    for(let i = 0; i < n; i++) {
        res[(i + k) % n] = nums[i]
    }
    return res
};
// console.log(rotate([1, 2, 3, 4, 5, 6, 7], 3));
// console.log(rotate([-1,-100,3,99], 2));
// 代码随想录解法，怎么证明？
// 第一步反转整个数组
// 第二步反转[0, k - 1]的数组
// 第三步反转[k, len - 1]的数组
// 注意k需要对len取余
var rotate1 = function(nums, k) {
    k = k % nums.length
    const reverse = (start, end) => {
        while(start < end) {
            let temp = nums[start]
            nums[start] = nums[end]
            nums[end] = temp
            start++
            end--
        }
    }
    reverse(0, nums.length - 1)
    reverse(0, k - 1)
    reverse(k, nums.length - 1)
    return nums
}
console.log(rotate1([-1,-100,3,99], 2))
/**
 * 如果是向左移动k次,那么
 * 先反转整个数组
 * 然后 [k, len - 1] [0, k - 1]
 */